import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_palette("viridis")
df = pd.read_csv('../data/sa/merged_interpolated.csv')
df.datetime = df.datetime.astype('datetime64')
dt = df['datetime'].dt
df['year'] = dt.year
df['month'] = dt.month
df['day'] = dt.day
df['hour'] = dt.hour
df['minute'] = dt.minute
df['day_of_week'] = dt.day_of_week
df['week'] = dt.isocalendar().week
df['week_of_month'] = (dt.day - 1) // 7 # day of month - 1 (0-30) // 7 (0-6=0, 7-13=1, 14-20=2, 21-27=3, 28-x=4)
df.head()
| datetime | tempc | cloud8 | windk | wdir | humid | rainmm | radkjm2 | pv_est | net_load | total_load | year | month | day | hour | minute | day_of_week | week | week_of_month | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2018-03-06 09:30:00 | 20.75 | 2.5 | 14.5 | 135.0 | 44.5 | 0.0 | 1915.0 | 318.991 | 1288 | 1136.79 | 2018 | 3 | 6 | 9 | 30 | 1 | 10 | 0 |
| 1 | 2018-03-06 10:00:00 | 21.50 | 1.0 | 16.0 | 140.0 | 40.0 | 0.0 | 2340.0 | 375.231 | 1237 | 1054.87 | 2018 | 3 | 6 | 10 | 0 | 1 | 10 | 0 |
| 2 | 2018-03-06 10:30:00 | 22.25 | 1.5 | 15.5 | 145.0 | 37.0 | 0.0 | 2570.0 | 430.909 | 1189 | 1002.35 | 2018 | 3 | 6 | 10 | 30 | 1 | 10 | 0 |
| 3 | 2018-03-06 11:00:00 | 23.00 | 2.0 | 15.0 | 150.0 | 34.0 | 0.0 | 2800.0 | 485.129 | 1150 | 971.54 | 2018 | 3 | 6 | 11 | 0 | 1 | 10 | 0 |
| 4 | 2018-03-06 11:30:00 | 23.55 | 2.0 | 13.0 | 145.0 | 32.0 | 0.0 | 2945.0 | 523.989 | 1122 | 943.68 | 2018 | 3 | 6 | 11 | 30 | 1 | 10 | 0 |
grouped_dow = df.groupby(['day_of_week', 'hour', 'minute'])[['net_load']].mean()
sns.lineplot(x='hour', y='net_load', data=grouped_dow, hue='day_of_week',
palette=sns.color_palette('viridis', as_cmap=True))
<Axes: xlabel='hour', ylabel='net_load'>
grouped_year_dow = df.groupby(['year', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
sns.lineplot(x='hour', y='net_load', data=grouped_year_dow, hue='year', palette=sns.color_palette('viridis', as_cmap=True))
<Axes: xlabel='hour', ylabel='net_load'>
g = sns.FacetGrid(grouped_year_dow.reset_index(), col='day_of_week', col_wrap=2,
hue='year', palette='viridis')
g.map(sns.lineplot, 'hour', 'net_load')
g.add_legend()
<seaborn.axisgrid.FacetGrid at 0x7ff64e062fa0>
grouped_year_month_dow = df.groupby(['year', 'month', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
g = sns.FacetGrid(grouped_year_month_dow.reset_index(), row='month', col='day_of_week',
hue='year', palette='viridis')
g.map(sns.lineplot, 'hour', 'net_load')
g.add_legend()
<seaborn.axisgrid.FacetGrid at 0x7ff64f2b30a0>
grouped_month_week_dow = df[df.year == 2022].groupby(['year', 'month', 'week_of_month', 'day_of_week', 'hour', 'minute'])[['net_load']].mean() # mean of one observation
g = sns.relplot(
data=grouped_month_week_dow.reset_index(), x='hour', y='net_load',
row='month', col='day_of_week', kind='line', errorbar=None,
hue='week_of_month', style='week_of_month', palette='viridis', legend='full')
grouped_year_week_dow = df.groupby(['year', 'week', 'day_of_week', 'hour', 'minute'])[['net_load']].mean()
g = sns.relplot(
grouped_year_week_dow.reset_index(), x='hour', y='net_load', row='week', col='day_of_week',
hue='year', palette='viridis', style='year', kind='line', legend='full', errorbar=None)